package communicationUDP;

import protocol.*;

import java.net.DatagramPacket;

/**
 * Transforme un paquet UDP en objet Requête.
 * 
 * @author Alexandre BOURSIER, Nolan POTIER
 */
public class UDP_to_Objet {

	private DatagramPacket packet;

	/**
	 * Constructeur normal
	 * 
	 * @param paquet
	 *            le datagramme à associer
	 * 
	 */
	public UDP_to_Objet(DatagramPacket paquet) {
		packet = paquet;
	}

	/**
	 * Transformer en objet
	 * @return la requête destination
	 */
	public Request transform_to_Objet() {
		Request request = null;

		// Récupérer la donnée encapsulée dans le datagramme
		byte[] byte_msg = packet.getData();

		// Convertir en string le message reçu
		String message = new String(byte_msg);

		// Récupérer la position du séparateur courant
		int pipe = message.indexOf("|");

		// Extraire la première chaîne pour obtenir le type de requête
		String type = message.substring(0, pipe);

		// Afficher le type de requête
		System.out.print(type);

		if (type.equals("ADD")) {
			// Délimiter le surnom
			int finSurnom = message.indexOf("|", pipe + 1);
			// Récupérer le surnom
			String surnom = message.substring(pipe + 1, finSurnom);
			// Récupérer le nom associé
			String nom = message.substring(finSurnom + 1,
					message.indexOf("|", finSurnom + 1));
			// Afficher le résultat obtenu
			System.out.println(" " + surnom + " " + nom);
			// Créer une requête de type add
			request = new Add(surnom, nom);
		} else if (type.equals("LIST_PLS")) {
			System.out.println();
			// Créer une requête de type list
			request = new protocol.List();
		} else if (type.equals("LIST_UN")) {
			// Récupérer l'index pour pouvoir cerner le nom
			int finNom = message.indexOf("|", pipe + 1);
			// Récupérer le nom
			String nom = message.substring(pipe + 1, finNom);
			System.out.println(" " + nom);
			request = new protocol.List(nom);
		} else if (type.equals("EXIT")) {
			// Traiter le cas d'une déconnexion
			request = new Request(Type.EXIT);
		}
		return request;
	}
}
